package com.sugar.follow.up.module.business.service.userpatient;

import com.sugar.follow.up.framework.common.pojo.PageResult;
import com.sugar.follow.up.module.business.controller.admin.userpatient.vo.UserPatientDoctorAllotReqVO;
import com.sugar.follow.up.module.business.controller.admin.userpatient.vo.UserPatientPageReqVO;
import com.sugar.follow.up.module.business.controller.admin.userpatient.vo.UserPatientRespVO;
import com.sugar.follow.up.module.business.controller.admin.userpatient.vo.UserPatientSaveReqVO;
import com.sugar.follow.up.module.business.controller.app.userpatient.vo.AppUserPatientSaveReqVO;
import com.sugar.follow.up.module.business.controller.app.userpatient.vo.AppUserPatientSimpleRespVO;
import com.sugar.follow.up.module.business.dal.dataobject.userpatient.UserPatientDO;
import com.sugar.follow.up.module.system.controller.admin.user.vo.user.UserSimpleRespVO;

import javax.validation.Valid;
import java.util.List;

/**
 * 就诊人 Service 接口
 *
 * @author Ysugar
 */
public interface UserPatientService {

    /**
     * 更新就诊人
     *
     * @param updateReqVO 更新信息
     */
    void updateUserPatient(@Valid UserPatientSaveReqVO updateReqVO);

    void userPatientDoctorAllot(@Valid UserPatientDoctorAllotReqVO doctorAllotReqVO);

    List<UserSimpleRespVO> getDoctors();

    /**
     * 删除就诊人
     *
     * @param id 编号
     */
    void deleteUserPatient(Long id);

    /**
    * 批量删除就诊人
    *
    * @param ids 编号
    */
    void deleteUserPatientListByIds(List<Long> ids);

    UserPatientRespVO backGetUserPatient(Long id);

    /**
     * 获得就诊人分页
     *
     * @param pageReqVO 分页查询
     * @return 就诊人分页
     */
    PageResult<UserPatientRespVO> getUserPatientPage(UserPatientPageReqVO pageReqVO);

    String generatorSql(List<String[]> tags);

    List<Long> execGeneratorSql(List<String[]> tags);

    // ======================================== APP 接口 ========================================

    /**
     * 获得就诊人
     *
     * @param id 编号
     * @return 就诊人
     */
    UserPatientDO getUserPatient(Long id);

    void appCreateUserPatient(AppUserPatientSaveReqVO updateReqVO, Long userId);

    void appUpdateUserPatient(AppUserPatientSaveReqVO updateReqVO, Long userId);

    void appDeleteUserPatient(Long id, Long userId);

    List<AppUserPatientSimpleRespVO> getUserPatientAllList(Long userId);
}